/*
 * 文件名：DeviceUtil.java
 * 版权：Copyright by 中财数元
 * 描述：
 * 修改人：YHC
 * 修改时间：2015年5月28日
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */

package com.zcsy.commons.util;

import javax.servlet.http.HttpServletRequest;

/**
 * 获取访问系统的硬件设备
 * 〈功能详细描述〉
 * @author YHC
 * @version 2015年5月28日
 * @see DeviceUtil
 * @since
 */

public class DeviceUtil {

	/**Wap网关Via头信息中特有的描述信息*/
    private static String mobileGateWayHeaders[]=new String[]{
    "ZXWAP",//中兴提供的wap网关的via信息
    "chinamobile.com",//中国移动的诺基亚wap网关
    "monternet.com",//移动梦网的网关
    "infoX",//华为提供的wap网关
    "XMS 724Solutions HTG",//国外电信运营商的wap网关
    "Bytemobile"
    };
    /**电脑上的IE或Firefox浏览器等的User-Agent关键词*/
    private static String[] pcHeaders=new String[]{
    "Windows 98",
    "Windows ME",
    "Windows 2000",
    "Windows XP",
    "Windows NT",
    "Ubuntu"
    };
    /**手机浏览器的User-Agent里的关键词*/
    private static String[] mobileUserAgents=new String[]{
    "Nokia",//诺基亚
    "SAMSUNG",//三星手机
    "MIDP-2",//j2me2.0，Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaE75-1 /110.48.125 Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML like Gecko) Safari/413
    "CLDC1.1",//M600/MIDP2.0/CLDC1.1/Screen-240X320
    "SymbianOS",//塞班
    "MAUI",//MTK山寨机
    "UNTRUSTED/1.0",//疑似山寨机的ua，基本可以确定还是手机
    "Windows CE",//Windows CE，Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)
    "iPhone",//iPhone是否也转
    "iPad",//iPad的ua
    "Android",//Android
    "BlackBerry",//BlackBerry
    "UCWEB",//ucweb
    "ucweb",//小写的ucweb
    "BREW",
    "J2ME",
    "YULONG",//宇龙手机
    "YuLong",//还是宇龙
    "COOLPAD",//宇龙酷派
    "TIANYU",//天语手机
    "TY-",//天语
    "K-Touch",//还是天语
    "Haier",//海尔手机
    "DOPOD",//多普达手机
    "Lenovo",// 联想手机
    "LENOVO",// 联想手机
    "HUAQIN",//华勤手机
    "AIGO-",//爱国者
    "CTC/1.0",
    "CTC/2.0",
    "CMCC",//移动定制手机
    "DAXIAN",//大显手机
    "MOT-",//摩托罗拉
    "SonyEricsson",// 索爱手机
    "GIONEE",//金立手机
    "HTC",//HTC手机
    "ZTE",//中兴手机
    "HUAWEI",//华为手机，
    "webOS",//palm手机
    "GoBrowser",//3g GoBrowser
    "IEMobile",//Windows CE手机自带浏览器，
    "WAP2.0"//支持wap 2.0
    };
    /**
    * 根据当前请求的特征，判断该请求是否来自手机终端，主要检测特殊的头信息，以及user-Agent这个header
    * @param request http请求
    * @return 如果命中手机特征规则，则返回对应的特征字符串
    */
    public static Boolean isMobileDevice(HttpServletRequest request){
    	Boolean result = false;
        boolean pcFlag = false;
        boolean mobileFlag = false;
        String via = request.getHeader("Via");
        String userAgent = request.getHeader("user-agent");
        for (int i = 0; via!=null && !via.trim().equals("") && i < mobileGateWayHeaders.length; i++) {
            if(via.contains(mobileGateWayHeaders[i])){
                mobileFlag = true;
                break;
            }
        }
        for (int i = 0;!mobileFlag && userAgent!=null && !userAgent.trim().equals("") && i < mobileUserAgents.length; i++) {
            if(userAgent.contains(mobileUserAgents[i])){
                mobileFlag = true;
                break;
            }
        }
        for (int i = 0; userAgent!=null && !userAgent.trim().equals("") && i < pcHeaders.length; i++) {
            if(userAgent.contains(pcHeaders[i])){
                pcFlag = true;
                break;
            }
        }
        if(mobileFlag==true && pcFlag==false){
            result = true;
        }
        return result;
    }

    /**
     * @Description 判断设备是否在微信打开<br>
     * 
     * @param request
     * @return 
     * @author tanghan barbadosliy@163.com
     * @date 2015年11月18日
     * @see 
     */
    public static Boolean isWeixin(HttpServletRequest request){
    	Boolean result = false;
    	String ua = ((HttpServletRequest) request).getHeader("user-agent")
				.toLowerCase();
		if (ua.indexOf("micromessenger") > 0) {// 是微信浏览器
			  result = true;
		}
    	return result;
    }
	
}
